Data 검색
✒️ 2025-05-28 16:46 내용 수정
DQL을 이용한 데이터 다루기
- SQL 편집기 작동은 DBeaver#단축키 참고
- DQL(Data Query Language)과 키워드 참고.
- HR에서 제공하는 기본 테이블들을 이용하면 쉽게 데이터 검색 연습을 할 수 있다.
1. 일반 검색
SELECT 컬럼명1, 컬럼명2, ... FROM 테이블명 WHERE 조건식;
SELECT * FROM 테이블명; -- 테이블의 모든 정보를 검색
-- EMPLOYEES 테이블의 모든 정보 출력
SELECT * FROM EMPLOYEES;
-- EMPLOYEES 테이블에서 이름, 직종, 급여만 조회
SELECT FIRST_NAME, JOB_ID, SALARY FROM EMPLOYEES;
- 테이블에 없는 컬럼 내용을 읽기 전용으로 조회할 수 있다.
-- EMPLOYEES 테이블에서 사번, 이름, 직종, 급여, 보너스율, 실제 보너스 금액 조회(보너스 금액은 없는 컬럼이다)
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY, COMMISSION_PCT, SALARY*COMMISSION_PCT FROM EMPLOYEES;
1) WHERE 조건절 사용
- WHERE 조건절을 사용해서 원하는 정보만 조회할 수 있다.
-- EMPLOYEES 테이블에서 급여가 10000 이상인 사원들의 정보 사번, 이름, 급여순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY FROM EMPLOYEES WHERE SALARY >= 10000;
-- EMPLOYEES 테이블에서 이름이 Michael 인 사원의 사번, 이름을 조회
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES WHERE FIRST_NAME = 'Michael';
-- EMPLOYEES 테이블에서 급여가 10000 이상이면서 13000 이하인 사원의 정보를 이름, 급여순으로 조회
SELECT FIRST_NAME, SALARY FROM EMPLOYEES WHERE SALARY >= 10000 AND SALARY <= 13000;
2) SQL 연산자 사용
- AND와 OR을 사용해서 두 개 이상의 조건을 넣을 수 있다.
-- EMPLOYEES 테이블에서 직종이 SA_MAN이거나 IT_PROG인 사원들의 모든 정보 출력
SELECT *
FROM EMPLOYEES
WHERE JOB_ID = 'SA_MAN' OR JOB_ID = 'IT_PROG';
-- EMPLOYEES 테이블에서 급여가 2200, 3200, 5000, 6000을 받는 사원들의 정보를
-- 사번, 이름, 직종, 급여순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE SALARY = 2200 OR SALARY = 3200 OR SALARY = '5000' OR SALARY = '6000';
- SQL 연산자 중 BETWEEN과 IN을 사용하면 AND와 OR 조건을 좀 더 간단하게 쓸 수 있다.
-- BETWEEN : A와 B사이
-- EMPLOYEES 테이블에서 급여가 5000 이상 6000 이하인 사원들의 정보를 사번, 이름, 급여 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 5000 AND '6000';
-- IN : OR 대신 사용
-- EMPLOYEES 테이블에서 직종이 SA_MAN이거나 IT_PROG인 사원들의 모든 정보 출력
SELECT *
FROM EMPLOYEES
WHERE JOB_ID IN ('SA_MAN', 'IT_PROG');
- LIKE를 사용하면 다양한 조건의 문자열 비교로 검색을 상세하게 할 수 있다.
-- EMPLOYEES 테이블에서 사원들의 이름 중 L로 시작하는 사원의 정보를
-- 사번, 이름, 부서 번호, 직종 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, JOB_ID
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'L%';
-- EMPLOYEES 테이블에서 사원들의 이름 중 d로 끝나는 사원의 정보를
-- 사번, 이름, 부서 번호, 직종 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, JOB_ID
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%d';
-- EMPLOYEES 테이블에서 사원들의 이름 중 i를 포함하는 사원의 정보를
-- 사번, 이름, 직종 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%i%';
-- EMPLOYEES 테이블에서 사원들의 이름 중 첫 글자가 A로 시작하고,
-- 이름의 글자 수가 4글자인 사원의 정보를 사번, 이름, 급여 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A___';
-- EMPLOYEES 테이블에서 사원들의 이름 중 첫 글자가 C로 시작하고,
-- 이름의 글자 수가 5글자 이상인 사원의 정보를 사번, 이름, 급여 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'C____%';
-- EMPLOYEES 테이블에서 사원들의 이름 중 4번째 위치에 n을 포함하고,
-- 마지막 글자가 r인 사원의 정보를 사번, 이름, 부서 번호 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '___n%r';
-- EMPLOYEES 테이블에서 사원들의 이름 중 f를 포함하지 않고,
-- a로 끝나는 사원의 정보를 사번, 이름, 급여 순으로 출력
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE FIRST_NAME NOT LIKE '%f%' AND FIRST_NAME LIKE '%a' ;
2. 정렬
SELECT 컬럼명 FROM 테이블명 ORDER BY 조건문 정렬옵션;
SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 조건문 ORDER BY 조건문 정렬옵션;
- HR에서 제공하는 EMPLOYEES 테이블을 사용한다.
-- EMPLOYEES 테이블에서 급여를 많이 받는 사원 순으로 사번, 이름, 급여를 출력
-- 급여가 같은 경우 사번을 오름차순으로 정렬
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
ORDER BY SALARY DESC, EMPLOYEE_ID; --ASC는 기본값이라 생략 가능
- 만약 정렬 옵션을 안 줬다면 급여가 내림차순 정렬이 안되는 것을 볼 수 있다.